/*
 * logger.h
 *
 *  Created on: 08/05/2012
 *      Author: federico
 */
#ifndef LOGGER_H_
#define LOGGER_H_

#include "../IPC/LockFile.h"
#include "../common/Object.h"
#include "../common/Date.h"
#include "LogLevelEnum.h"
#include <iostream>
#include <fstream>

class CLogger
{
public:
	static const char SEPARATOR = ';';

	LockFile m_file;

public:

	/**
	 *
	 */
	virtual ~CLogger();

	/**
	 *	Los argumentos son: el mensaje a loggear y el Error lvl de ese mensaje,
	 *  tener en cuenta que solo se van a loguear los mensajes con un
	 *	Error lvl >= al LVL configurado en el logger.
	 */
	static void log( std::string message, int level = LogLevelEnum::DEBUG );

	/**
	 * setLevel: Configura el nivel de Logs, lo cual implica que cualquier log
	 *  que tenga un nivel menor al del logger NO VA A MOSTARSE!
	 */
	static void setLevel ( int newLogLevel );

	/**
	 * setLevel: Configura el nivel de Logs, lo cual implica que cualquier log
	 *  que tenga un nivel menor al del logger NO VA A MOSTARSE!
	 */
	static int getLevel ();


public:
	static void create(std::string processName);

	static void destroy();


private:
	/**
	 *
	 */
	CLogger(std::string processName);

	/**
	 *
	 */
	CLogger(CLogger&);

	/**
	 *
	 */
	LogLevelEnum m_logguerLevel;

	/**
	 *
	 */
	static CLogger * m_instance;
//
//	/**
//	 *
//	 */
//	std::string idName;

	/**
	 *
	 */
	std::ofstream m_logFile;

	/**
	 *
	 */
	std::string m_ProcessName;
};

#endif /* LOGGER_H_ */
